#include "bits/stdc++.h"
using ll = long long ;
#define F first
#define S second
const ll mod = 998244353 ;
const ll N = 2e5 + 5 ;
using namespace std;
double fact[55];
ll n , p , vis[55][55][55] , timer , a[55] , t = 1;
double dp[55][55][55];
double DP(ll i , ll take , ll sum , ll j)
{
if(sum > p)return 0 ;
if(i == n + 1)
{
if(sum + a[j] > p)
{
return take * fact[take] * fact[n - take - 1] / fact[n] ;
}
return 0 ;
}
double &ret = dp[i][take][sum] ;
if(vis[i][take][sum] == timer)return ret ;
vis[i][take][sum] = timer ;
ret = 0.0 ;
if(i == j)return ret = DP(i + 1 , take , sum , j) ;
ret += DP(i + 1 , take + 1 , sum + a[i] , j) ;
ret += DP(i + 1 , take , sum , j) ;
return ret ;
}
int main()
{
//cin >> t ;
while(t--)
{
fact[0] = 1.0 ;
for(int i = 1 ; i <= 50 ; ++i)fact[i] = fact[i - 1] * i ;
cin >> n ;
int sum = 0 ;
for(int i = 1 ; i <= n ; ++i)cin >> a[i] , sum += a[i] ;
cin >> p ;
if(sum <= p){
cout << n << "\n";
return 0;
}
double ans = 0.0 ;
for(int i = 1 ; i <= n ; ++i)
{
timer = timer + 1 ;
ans += DP(1 , 0 , 0 , i) ;
}
cout << fixed << setprecision(10) << ans << "\n";
}
}
1529A - Eshag Loves Big Arrays | 19. Remove Nth Node From End of List |
925. Long Pressed Name | 1051. Height Checker |
695. Max Area of Island | 402. Remove K Digits |
97. Interleaving String | 543. Diameter of Binary Tree |
124. Binary Tree Maximum Path Sum | 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts |
501A - Contest | 160A- Twins |
752. Open the Lock | 1535A - Fair Playoff |
1538F - Interesting Function | 1920. Build Array from Permutation |
494. Target Sum | 797. All Paths From Source to Target |
1547B - Alphabetical Strings | 1550A - Find The Array |
118B - Present from Lena | 27A - Next Test |
785. Is Graph Bipartite | 90. Subsets II |
1560A - Dislike of Threes | 36. Valid Sudoku |
557. Reverse Words in a String III | 566. Reshape the Matrix |
167. Two Sum II - Input array is sorted | 387. First Unique Character in a String |